package com.tedu.teacherweibo.demos.web.controller;

import com.tedu.teacherweibo.demos.web.mapper.UserMapper;
import com.tedu.teacherweibo.demos.web.pojo.dto.UserLoginDTO;
import com.tedu.teacherweibo.demos.web.pojo.dto.UserRegDTO;
import com.tedu.teacherweibo.demos.web.pojo.entity.User;
import com.tedu.teacherweibo.demos.web.pojo.vo.UserVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Date;

@RestController
//在Controller上也可以使用RequestMapping注解，将方法中请求路径相同的部分放在这里
@RequestMapping("/v1/users")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @PostMapping("/reg")
    /*
        @RequestBody注解用于告知SpringMVC框架，浏览器传递
        过来的数据是以JSON格式传递的，因此要以此种方式解析
        并创建UserRegDTO
     */
    public int reg(@RequestBody UserRegDTO userRegDTO){
        System.out.println("开始处理注册");
        //首先根据该注册用户的用户名检查是否已经被注册过
        if(userMapper.selectByUsername(userRegDTO.getUsername())!=null){//用户名已存在
            return 2;
        }

        User user = new User();
        BeanUtils.copyProperties(userRegDTO,user);
        user.setCreated(new Date());
        //将数据保存到数据库完成注册
        userMapper.insert(user);

        return 1;
    }

    @PostMapping("/login")
    public int login(@RequestBody UserLoginDTO userLoginDTO, HttpSession session){
        User user = userMapper.selectByUsername(userLoginDTO.getUsername());
        if(user!=null){//该用户存在(用户名正确)
            if(user.getPassword().equals(userLoginDTO.getPassword())){
                //将该用户信息存入Session，用于表达该用户登录成功
                session.setAttribute("user",user);
                //密码也正确
                return 1;
            }else{
                return 2;
            }
        }else{
            //用户不存在
            return 3;
        }
    }

    @GetMapping("/currentUser")
    public UserVO currentUser(HttpSession session){
        //从session中根据"user"这个key提取该用户信息
        User user = (User)session.getAttribute("user");
        if(user==null){
            return null;
        }else{
            UserVO userVO = new UserVO();
            BeanUtils.copyProperties(user,userVO);
            return userVO;
        }
    }

    @GetMapping("/logout")
    public void logout(HttpSession session){
        session.removeAttribute("user");
    }

}









